<?php
include($_SERVER["DOCUMENT_ROOT"] . "/bob.php");
include($_SERVER["DOCUMENT_ROOT"] . "/forum/fonctions_forum.php");
include("fonctions_messagerie.php");
$mysqli = new_mysqli($host, $user, $password, $database); //connection à la DB
$variable_get = filter_input_array(INPUT_GET);
$variable_post = filter_input_array(INPUT_POST);

if (empty($_SESSION['login'])) {
    header("Location: /");
    exit();
}

$to = 0;
$destinataire = "";
$sujet = "";
$messa = "";
$erreur="";
$action="new";
$adresse_envoi_form="postmess.php?action=new";
if (isset($variable_get['action'])) {
    
    $action = $variable_get['action'];
    $to = get_num($variable_post['id_destinataire']);
    $from = $_SESSION['id'];
    $messa = get_data_ss_tag($variable_post['message']);
    $dat = $dat = strtotime("now");
    $status_exp = "READ";
    $status_dest = "UNREAD";
    if ($messa != "") {
        if($variable_get['action']=='reply'){
            $id_thread = $variable_get['conversation'];
            $sujet = get_data_in_db($mysqli, "privmsgs_thread", "privmsgs_thread_id", $id_thread, "thread_subject");
            $action="reply";
            $adresse_envoi_form="postmess.php?action=reply&conversation=".$id_thread;
        }        
        $messa = $mysqli->real_escape_string($messa);
        $dbbc = 1;
        if (isset($variable_post['ncod'][0]) && $variable_post['ncod'][0] == '1') {
            $dbbc = 0;
        }
        $dsmil = 1;
        if (isset($variable_post['nsmil'][0]) && $variable_post['nsmil'][0] == '1') {
            $dsmil = 0;
        }
        $ipp = $_SERVER['REMOTE_ADDR'];
        //Anti-spam
        $date_limite = $dat - 20;
        // TODO remettre l'IP, comme ça : $result = mysqli_query_with_error($mysqli, "SELECT privmsgs_id FROM privmsgs WHERE (privmsgs_from_userid = {$_SESSION['id']} OR privmsgs_ip = '$ipp') AND privmsgs_date > $date_limite LIMIT 1");
        $result = mysqli_query_with_error($mysqli, "SELECT privmsgs_id FROM privmsgs WHERE (privmsgs_from_userid = {$_SESSION['id']}) AND privmsgs_date > $date_limite LIMIT 1");

        if ($_POST['idefix'] != md5(session_id() . $_SESSION['id'])) { //TODO mettre plus haut les trucs qui annulent, afin de ne pas executer les lignes précédentes pour rien.
            $erreur = "Il semblerai que vous ayez été victime d'une tentative de piratage. 
		La page où vous étiez précédemment a été créée pour détourner votre session.";
        } else if (get_line_numbers($mysqli, "gens", "user_id", $to) == 0) {
            $erreur = "Ce destinataire n'existe pas.";
        } else if ($result->num_rows != 0) {
            $erreur = "Veuillez attendre au moins trente secondes entre deux messages, merci.";
        } else {
            
            switch ($action) {
                case 'new':
                    
                    $sujet = $mysqli->real_escape_string(get_data_ss_tag($variable_post['sujet']));
                    if ($sujet == "") {
                        $sujet = "(sans sujet)";
                    }
                    $rqt_new_thread = "INSERT INTO privmsgs_thread(thread_subject,privmsgs_thread_update_date) values ('" . $sujet . "','".$dat."')";
                    mysqli_query_with_error($mysqli,$rqt_new_thread);
                    $id_thread = mysqli_insert_id($mysqli);
                    $rqt_new_status = "INSERT INTO privmsgs_thread_gens(thread_id, user_id, status_envoi) values (".$id_thread.",".$_SESSION['id'].",'READ')";
                    mysqli_query_with_error($mysqli,$rqt_new_status);
                    $rqt_new_status = "INSERT INTO privmsgs_thread_gens(thread_id, user_id, status_recept) values (".$id_thread.",".$to.",'UNREAD')";
                    mysqli_query_with_error($mysqli,$rqt_new_status);
                    $redirection="messages.php?boite=envoi";
                    break;
                case 'reply':
                   
                    $id_thread = $variable_get['conversation'];
                    $sujet = get_data_in_db($mysqli, "privmsgs_thread", "privmsgs_thread_id", $id_thread, "thread_subject");
                    $rqt_update_date="UPDATE privmsgs_thread SET privmsgs_thread_update_date='".$dat."' WHERE privmsgs_thread_id=".$id_thread;
                    mysqli_query_with_error($mysqli,$rqt_update_date);
                    $rqt_update_status="UPDATE privmsgs_thread_gens SET status_recept='UNREAD' WHERE thread_id=".$id_thread." AND user_id=".$to;
                    mysqli_query_with_error($mysqli,$rqt_update_status);
                    $rqt_update_status="UPDATE privmsgs_thread_gens SET status_envoi='READ' WHERE thread_id=".$id_thread." AND user_id=".$_SESSION['id'];
                    mysqli_query_with_error($mysqli,$rqt_update_status);
                    $redirection="imessage.php?id=".$id_thread."&page=derniere";       
                    break;
                default:
                  
                    header("Location: /");
                    exit();
            }
            echo $redirection;
            mysqli_query_with_error($mysqli, "INSERT INTO privmsgs(thread_id,privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_text, enable_bbcode, enable_smilies)
		 VALUES(".$id_thread.",".$from.", ".$to.", '".$dat."', '".$ipp."', '".$messa."', ".$dbbc.", ".$dsmil.")");
        
            header("Location: ".$redirection);
            exit();
        }
    }
}else{
    if(isset($variable_get['destinataire'])){
        $to=trim($mysqli->real_escape_string($variable_get['destinataire']));
        $destinataire=  get_data_in_db($mysqli, 'gens', 'user_id', $to, 'username');
    }
}            

?>


<?php
main_body($mysqli, "Poster un message", "bandeau;messagerie;forum");
javascript_BBcode();
display_bandeau_profil($mysqli,"message"); 
?>
    <div id='background_corps'> </div><!-- Div contenant simplement la couleur du corps, qui vient se glisser sous le motif de bulle
 											(le vrai corp se glisse au-dessus, pour être cliquable). -->
    <div id='corps'>
        <div id="contenus">
            <?php if ($erreur!=""){
                ?>
            <center><div id="boite_feedback"><?php echo $erreur ?></div></center>
                <?php
            }
            ?>
            <ul class="menu-messagerie">
                <li class="btn ombre"><a href="postmess.php">Nouveau message</a></li>
                <li class="bordure"><a href="messages.php">Boite de réception</a></li>
                <li class="bordure"><a href="messages.php?boite=envoi">Messages envoyés</a></li>
                <li><a href="messages.php?boite=archive">Messages archivés</a></li>
            </ul>
            <div class="messagerie">        
                <form name='formul' class="post ombre" id="message" action='<?php echo $adresse_envoi_form ?>' method='POST'>
                    <input type='hidden' name='idefix' value='<?php echo md5(session_id() . $_SESSION['id']) ?>'>    
                    <h4 class="ombre">Nouveau message</h4>
                    <div class="informations">
                        <input type="hidden" name="id_destinataire" id="id_destinataire" value="<?php echo $to ?>" />                
                        <label for="destinataire">Destinataire</label>
                        <?php
                        if($action=='reply'){
                        $to_name=  get_data_in_db($mysqli, "gens", "user_id", $to, "username");
                        echo '<p>'.$to_name.'</p>';
                        }else{
                        ?>

                        <input id="destinataire" type="text" name="destinataire" value="<?php echo $destinataire ?>" autocomplete="off" />
                        <div id="resultat_autocompletion" class="ombre"></div>
                        <script>
                            (function() {

                                var searchElement = document.getElementById('destinataire'),
                                        results = document.getElementById('resultat_autocompletion'),
                                        selectedResult = -1, // Permet de savoir quel résultat est sélectionné : -1 signifie « aucune sélection »                            
                                        previousRequest = "", // On stocke notre précédente requête dans cette variable                            
                                        previousValue = searchElement.value; // On fait de même avec la précédente valeur
                                id_result = document.getElementById('id_destinataire');

                                var selection=false;




                                function getResults(keywords) { // Effectue une requête et récupère les résultats

                                    var xhr = new XMLHttpRequest();
                                    xhr.open('GET', 'ajax/find_pseudo.php?username=' + encodeURIComponent(keywords));

                                    xhr.onreadystatechange = function() {
                                        if (xhr.readyState == 4 && xhr.status == 200) {

                                            displayResults(xhr.responseText);

                                        }
                                    };

                                    xhr.send(null);

                                    return xhr;

                                }

                                function displayResults(response) { // Affiche les résultats d'une requête

                                    results.style.display = response.length ? 'block' : 'none'; // On cache le conteneur si on n'a pas de résultats

                                    if (response.length) { // On ne modifie les résultats que si on en a obtenu

                                        response = response.split('|');
                                        var responseLen = response.length;

                                        results.innerHTML = ''; // On vide les résultats

                                        for (var i = 0, div; i < responseLen; i++) {

                                            div = results.appendChild(document.createElement('div'));
                                            input = results.appendChild(document.createElement('input'));
                                            div.innerHTML = response[i];
                                            div.className = 'result_ligne';
                                            i++;
                                            input.setAttribute('type', 'hidden');
                                            input.setAttribute('name', 'reponse' + i);
                                            input.setAttribute('value', response[i]);

                                            div.onclick = function() {
                                                chooseResult(this);
                                            };

                                        }

                                    }

                                }

                                function chooseResult(result) { // Choisit un des résultats d'une requête et gère tout ce qui y est attaché
                                    selection=true;
                                    searchElement.value = previousValue = result.innerHTML; // On change le contenu du champ de recherche et on enregistre en tant que précédente valeur
                                    elt_suivant = result.nextSibling;

                                    id_result.setAttribute('value', elt_suivant.value);
                                    results.style.display = 'none'; // On cache les résultats
                                    result.className = ''; // On supprime l'effet de focus
                                    selectedResult = -1; // On remet la sélection à zéro
                                    searchElement.focus(); // Si le résultat a été choisi par le biais d'un clic, alors le focus est perdu, donc on le réattribue

                                }





                                searchElement.onkeyup = function(e) {

                                    e = e || window.event; // On n'oublie pas la compatibilité pour IE
                                    if (searchElement.value !== "") {
                                        var divs = results.getElementsByTagName('div');

                                        if (e.keyCode == 38 && selectedResult > -1) { // Si la touche pressée est la flèche « haut »

                                            divs[selectedResult--].className = 'result_ligne';

                                            if (selectedResult > -1) { // Cette condition évite une modification de childNodes[-1], qui n'existe pas, bien entendu
                                                divs[selectedResult].className += ' result_focus';
                                            }

                                        }

                                        else if (e.keyCode == 40 && selectedResult < divs.length - 1) { // Si la touche pressée est la flèche « bas »

                                            results.style.display = 'block'; // On affiche les résultats

                                            if (selectedResult > -1) { // Cette condition évite une modification de childNodes[-1], qui n'existe pas, bien entendu
                                                divs[selectedResult].className = 'result_ligne';
                                            }

                                            divs[++selectedResult].className += ' result_focus';

                                        }

                                        else if (e.keyCode == 13 && selectedResult > -1) { // Si la touche pressée est « Entrée »

                                            chooseResult(divs[selectedResult]);

                                        }

                                        else if (searchElement.value != previousValue) { // Si le contenu du champ de recherche a changé

                                            previousValue = searchElement.value;

                                            if (previousRequest && previousRequest.readyState < 4) {
                                                previousRequest.abort(); // Si on a toujours une requête en cours, on l'arrête
                                            }

                                            previousRequest = getResults(previousValue); // On stocke la nouvelle requête

                                            selectedResult = -1; // On remet la sélection à zéro à chaque caractère écrit

                                        }
                                    } else {
                                        results.style.display = 'none';
                                    }

                                };

                            })();
                        </script>
                        <?php
                        }
                        ?>
                        <br/>
                        <label for="objet">Objet</label>
                        <?php
                        if ($action=="reply"){
                            echo '<p>'.$sujet.'</p>';
                        }else{
                        ?>
                        <input id="objet" type="text" maxlength="40" name="sujet" value="<?php echo $sujet ?>"/>
                        <?php
                        }
                        ?>
                    </div>
        <?php
        display_post_message(true, true, $messa, $mysqli);

        echo '<ul class="actions">';
        //!A echo '<li><input type="checkbox" name="auto" value="auto" name="nsmil" id="smiley_off"><label for="smiley_off">Désactiver les smileys</label></li>';
        echo '<li class="btn ombre droit"><input type="submit" value="Envoyer"></li>';
        //echo '<li class="btn ombre droit"><input type="submit" value="Prévisualiser"></li>';
        echo '</ul>';
        ?>
                </form>
            </div>
        </div> <!-- fin div contenu-->
    </div> <!-- fin div corps-->
<?php
show_footer();



//display_smileys_collection($mysqli);//smileys
//echo "<div style='text-align:center; padding-right:10px; margin-left:250px;'>$erreur<br>
//<form name='formul' action='postmess.php' method='POST'><input type='hidden' name='idefix' value='".md5(session_id().$_SESSION['id'])."'>
//Destinataire: <select name='destinataire' class='noir'>";
//$result = mysqli_query_with_error($mysqli, "SELECT * FROM gens ORDER BY username");
//while($ligne = $result->fetch_assoc()) {
//	$blaze = get_data_propre_sortie_db($ligne['username']);
//	echo "<option value='{$ligne['user_id']}'";
//	if($to == $ligne['user_id']) echo " selected";
//	echo ">$blaze";
//}
//
//echo"</select><br><br>Sujet : <input type='text' class='noir' name='sujet' value='$sujet' maxlength='40'> &nbsp;&nbsp;&nbsp;";
//display_post_message(1, 1, get_data_ss_tag(@$_POST['message']));
//
?>